hooks (React)
公式ドキュメントの説明が丁寧なので読むことを強く推奨するkadoyau.icon
React 16.8で導入された
Hooksを使うと、Class (React)を使わずに、function componentにlocal stateを加えたりできる モチベーション
ステートフルなロジックをコンポーネント間で再利用するのは難しい
複雑なコンポーネントは理解しづらくなる
我々はよく、最初はシンプルだったのに、state を使うロジックや副作用によって管理不能なごちゃ混ぜ状態に陥ってしまったコンポーネントをメンテナンスさせられてきました。それぞれのライフサイクルメソッドには、しばしば互いに関係のないロジックが混在してしまいます。例えばとあるコンポーネントは componentDidMount と componentDidUpdae で何かデータを取得しているかもしれません。しかし同じ componentDidMount 内には、イベントリスナーを登録する何か無関係なロジックがあるかもしれませんし、そのクリーンアップのコードは componentWillUnmount に書かれているかもしれません、といった具合です。一緒に更新されるべき互いに関連したコードがバラバラにされ、一方でまったく無関係なコードが 1 つのメソッド内に書かれています。このような状態は簡単にバグや非整合性を引き起こします。
テストできなくなる
こういうのが困るので状態管理にReduxとか使うけど、結果として抽象化が過剰になる
クラスは人間と機械の両方を混乱させる
機械:最適化がムズいらしい
classはつらいのでReact.FCをつかって、stateが必要なところはhooksでやろうという流れっぽいkadoyau.icon Q.フック、クラスのいずれを使うべきですか、あるいはその両方でしょうか?
A. 長期的には、フックが React のコンポーネントを書く際の第一選択となることを期待しています
Hookの構文はいろいろある
命名規則:常にuseから始まる
useState
context (React) objectを受け取って、与えられたcontextに最も近いcontext providerがら受け取ったcontextを返す providerが更新されたとき、最新のcontext valueでrerenderされる
エラーが起こる使い方
関数コンポーネントが状態を持てるようにするもので、関数のメモ化のテクニックを多用します。 redux を置き換えるものではない。が… Redux の機能を一部吸収しています(useReducer)。後述する Context と組み合わせることで、middleware なし Redux が簡単に実現できます。 継承, Mixin, HOC, render props, Hooksの登場によって, Reactの副作用分割パターンがどう変遷していったのか分かるようにすることがこの記事の目的 ハマり
HooksのdepsにはHooksの依存物をすべて書く